// 一个任务可以有多个对象来处理, 这时候就可以用责任链模式

// 应用示例
// JS 中的事件冒泡
// express、koa中间件洋葱模型

//  任务类
class Assgin {
    task:any
    constructor(task){
        this.task = task
    }
}

// 工作流类
class WorkFlow{
    assgin:any
    constructor(assgin){
        this.assgin = assgin
    }

    handler(executor){
        if(this.assgin.task === executor.task){
            executor.doWork();
        }else{
            this.handler(executor.nextExecutor);
        }
        return ;
    }
}


// 执行类
class Executor {
    name:any;
    task:any;
    nextExecutor:any;
    constructor(name, task, nextExecutor?){
        this.name = name;
        this.task = task;
        this.nextExecutor = nextExecutor
    }

    doWork(){
        console.log(`${this.name} 处理本项工作: ${this.task}`)
    }
}

// 创建任务
const assgin = new Assgin('SQL优化');

// 创建任务处理人
const C = new Executor('王五', 'SQL优化');
const B = new Executor('李四', '后端开发', C);
const  A = new Executor('张三', '前端开发',B);

const workFlow = new WorkFlow(assgin);
workFlow.handler(A);


// 优缺点： 降低了请求的发送者和接受者之间的耦合、分工明确、代码更加清晰。但同时需要层层传递下去寻找能处理任务的接受者，所有的判定条件都要执行一遍，链条过长时，可能存在性能问题。